package com.open.capacity.task.controller;

import com.open.capacity.common.web.PageResult;
import com.open.capacity.common.web.Result;
import com.open.capacity.task.model.TaskComment;
import com.open.capacity.task.service.CommentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;

@Slf4j
@RestController
@Api(tags = "TaskComment API")
@RequestMapping("/taskComment")
public class CommentController {
    @Autowired
    CommentService commentService;

    /**
     * 根据条件查询出符合条件的所有的评论的信息
     *
     * @param params
     * @return
     */
    @GetMapping("/findComment")
    @ApiOperation(value = "根据条件返回评论（包含了条件查询）")
    public PageResult<TaskComment> findComment(@RequestParam Map<String, Object> params) {
        return commentService.findComment(params);
    }

    /**
     * 评论的新增，包括任务的评论，和评论的回复
     *
     * @param taskComment
     * @return
     */
    @PostMapping("/add")
    @ApiOperation(value = "评论的新增")
    public Result add(@RequestBody TaskComment taskComment) {
        return commentService.add(taskComment);
    }

    /**
     * 删除评论,只有评论发布者可以进行删除，（管理员被举报评论可以进行核查删除）
     */
    @DeleteMapping("/{id}")
    @ApiOperation(value = "删除评论，只可以逻辑删除")
    public Result del(@PathVariable String id) {
        return commentService.delete(id);
    }

    /**
     * 根据用户id查询出用户昵称 用来前端显示评论人信息（同样可以查询出用户头像信息，显示头像和昵称）
     *
     * @param userId
     * @return
     */
    @PutMapping("/{userId}")
    @ApiOperation(value = "根据用户id查询出用户昵称返回给前台展示")
    public Result findUserById(@PathVariable String userId) {
        return commentService.findUserById(userId);
    }

    /**
     * 根据任务id查询出该任务下所有的一级评论，这里使用分页查询，
     *
     * @param params
     * @return
     */
    @PostMapping("/findCommentById")
    @ApiOperation(value = "根据任务的id（tId）查询出该任务下方所有的一级评论（直接评论任务的评论）")
    public PageResult<TaskComment> findCommentById(@RequestParam Map<String, Object> params) {
        return commentService.findCommentById(params);
    }

    /**
     * 根据评论id查询出该评论下方的所哟子评论，不用分页查询，直接查询出所有传递给前端
     *
     * @param id
     * @return
     */
    @PostMapping("/findSubCommentById")
    @ApiOperation(value = "根据评论的id查询该评论的子id")
    public Result findSubCommentById(Integer id) {
        return commentService.findSubCommentById(id);
    }

    /**
     * 根据评论的id查询出该评论的点赞数然后返回给前端进行数据展示
     *
     * @param id
     * @return
     */
    @PostMapping("/getLikeCountByCmtId")
    @ApiOperation(value = "根据评论id查询该评论的点赞数")
    public Result getLikeCountByCmtId(Integer id) {
        return commentService.getLikeCountByCmtId(id);
    }

    /**
     * 对某个评论进行点赞或者取消点赞。在service进行判断是否已经点过赞从而判断是点赞还是取消点赞。
     * @param userId
     * @param cId
     * @return
     */
    @PostMapping("/giveLikeOrCancel")
    @ApiOperation(value = "评论点赞或取消点赞")
    public Result giveLikeOrCancel(String userId, Integer cId) {
        return commentService.giveLikeOrCancel(userId, cId);
    }
}
